iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0

Day19 悲觀樂觀鎖

今天要講一個的主題,觀念會跟前面有點不太連貫(但因為沒準備所以只好先分享),這篇有 reference 另一個鐵人賽的文章,至頂放在上面,大家也可以去看他原文關聯式資料庫要如何設計避免超賣?

但還是特別題一下,MySQL做併發控制主要是使用 Shared Exclusive Lock(SX-lock),別名RW-lock(Reader Writer lock),就是用讀鎖跟寫鎖搭配事務隔離設定去做到自動併發控制管理。所以在這邊講的悲觀鎖/樂觀鎖是一種實作觀念,而不是指 MySQL 本身的機制。

先簡單講
在 MySQL 預設的隔離級別 REPEATABLE READ (這目前文章都還沒提到,會在後面章節補上)的背景前提下

  1. 悲觀鎖:是MySQL鎖機制的排他鎖(exclusive-lock),在此隔離層級下會鎖定讀寫,語法是 select xxx for update,通常在頻繁併發寫入的時候會選擇使用悲觀鎖。

  2. 樂觀鎖:樂觀鎖是一種不用上鎖但是能夠處理併發情況的機制,主要實踐是MVCC(multi version concurrency control),就是多一個欄位去存版本,如果在更新的時候發現有其他session已經更新過(去比對稍早取出來的版本跟目前資料庫的版本不一致的話),就會重新取值然後做修改。樂觀鎖的併發量會比較高,因為不用上鎖,適合讀取比較多的情境。

明天會舉一個超賣例子來講一下悲觀樂觀鎖


上一篇
Day18 聯合索引2
下一篇
Day20 sql練習悲觀鎖
系列文
我獨自升級之資料庫從入門到中階20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言